"""
爬虫的流程：
（一）数据来源分析
    1、需求分析
        - 随便输入一个直播链接。就可以自动念直播弹幕。
    2、接口分析
        - 数据是静态的还是动态的
        - url = 'https://api.live.bilibili.com/xlive/web-room/v1/dM/gethistory?roomid=7734200&room_type=0'

（二）爬虫代码实现
    1、发送请求
    2、获取数据
    3、解析数据
    4、保存数据
"""
import requests
import pyttsx3  # tts (text to speech)


class DanmuCrawler:
    
    def __init__(self, room_id):
        self.url = 'https://api.live.bilibili.com/xlive/web-room/v1/dM/gethistory'
        self.params = {
            "roomid": room_id,
            # "roomid": "7734200",
            "room_type": "0",
        }
        self.headers = {
            'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/115.0.0.0 Safari/537.36 Edg/115.0.1901.183',
        }
        self.json_data = {}
        # 第一步：实例化语音引擎
        self.engine = pyttsx3.Engine()

    def get_data(self):
        resp = requests.get(url=self.url, params=self.params, headers=self.headers)
        self.json_data = resp.json()
    
    def parse_data(self):
        for item in self.json_data['data']['room']:
            text = item['text']
            timeline = item['timeline']
            nickname = item['nickname']
            print(f'“{nickname}”说：{text}', timeline)
            self.speech(f'“{nickname}”说：{text}')

    def speech(self, text):
        # 第二步：tts
        self.engine.say(text)
        # 第三步：运行
        self.engine.runAndWait()

    def run(self):
        self.get_data()
        self.parse_data()


def main():
    url = input('请输入你想观看的直播间链接\n>>>:')
    room_id = url.split('?')[0].split('m/')[1]

    spider = DanmuCrawler(room_id)
    while True:
        spider.run()


if __name__ == '__main__':
    main()
